package org.zn.note.jdk.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 测试一下，一个jvm运行(一个进程)，起多线程，是仅在一个core上“并发”多线程，还是能在多个core上“并行”多线程。
 * 本地电脑是单CPU 4核的，然后起4个线程跑浮点数运行，看看任务管理器CPU使用情况，是一个core高，还是都高。
 * 结论：java跑多线程是可以用到所有core的！
 * 4线程时，cpu100%，然后所有core的使用记录都是最高的。
 * 3线程时，cpu80%左右，其中3个core比较高但是没到最高，另外1个core不高应该是没用到
 * <p>
 * “并行(concurrency)”：“同时运行”。“看起来”在同时运行，其实是在来回切换任务，主要是描述对外的感官的，“并行执行”。
 * “并发(parallelism)”：“同时发生”。是真的在一起执行，因为多核。
 */
public class TestCpuCore {
    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(3);
        for (int i = 0; i < 4; i++)
            es.submit(() -> {
                double d = 1.1d;
                while (true)
                    d = d * 1.1d;
            });
        es.shutdown();
    }
}
